---------------------------------------------------------------------------------------------------
--dream5
---------------------------------------------------------------------------------------------------
dream5start = gfxroom {
   ontimer      = function(s)
                    if s._x == nil then
                      s._x = -527;
                    end
                    if s._x > -2 then
                      return;
                    end
                    local gfx = s:loadgfx("corona");
                    sprite.copy(gfx, s.pic, s._x, 0);
                    if s._frames >= 40 then
                      s._x = s._x + 2;
                    end
                    
                    if s._frames == 20 then
                      play_music("orbit_alt");
                    end
                  end
  ,stop         = 340
  ,next         = chain_ {
                    walk_("dream5")
                  }
  ,rate         = 70
  ,dispose      = nil_("_x")
}

dream5 = scene {
   _done        = false
  ,checkpoint   = true
  ,obj          = {
                     "dream5_start"
                    ,"dream5_professor1"
                    ,"dream5_victor1"
                    ,"dream5_surround"
                    ,"dream5_terminals"
                    ,"dream5_sit1"
                  }
  ,Refresh      = redirect_("Exam", "dream5_surround")
  ,Exit         = [[Я не собираюсь просто так уходить посреди практики.]]
  ,Wait         = redirect_("Listen", "dream5_professor1")
}

dream5_start = rooms.event
  [[Лаврентьев начинает свою обычную вступительную лекцию с таким видом, словно мы -- новички, которые
    ещё ни разу не подключались к нейроинтерфейсу, и я невольно вспоминаю последнюю симуляцию --
    тогда нужно было вывести корабль на эллиптическую орбиту невероятного газового гиганта, и ощущения,
    глубокая темнота вокруг, огненная корона неимоверной планеты, были такими реальными, что мне несколько
    дней после этого снились яркие цветные сны.^
    -- Последнее время ходят всякие истории о несчастных случаях, когда из-за ошибок в интерфейсе
    оператор превращается чуть ли не в овоща, так вот... -- Лаврентьев как-то забавно складывает ладони
    и потрясает ими в воздухе, -- могу вас уверить, что это...^
    -- С чего это он вдруг? -- шёпотом спрашивает меня Виктор.^
    Я пожимаю плечами.^
    -- Вероятность этого, -- продолжает Лаврентьев, -- меньше, чем, скажем, вероятность того, что на
    планету обрушится огромный метеор, который не смогла заметить ни одна из наших систем...^
    -- Видимо, он считает, что это обнадёживает, -- говорю я Виктору.^
    Виктор с трудом сдерживает смешок.^
    -- Большинство людей, -- рассказывает Лаврентьев, -- в принципе не могут работать с нейроинтерфейсом.^
    Вы все относитесь к двум процентам...^
    -- Мне начинает казаться, что те слухи о парне со старшего курса, правда, -- шепчет мне Виктор. -- С
    чего бы он вдруг стал нам эту лекцию читать?^
    -- Господа! -- Лаврентьев раздражённо качает рукой. -- Попросил бы немного внимания! Всё-таки это
    важно.^
    -- Извините, -- говорит Виктор.^
    Лаврентьев продолжает свои нравоучения. Мне не остаётся ничего, как слушать.]]

dream5_professor1 = item {
   _listen      = 0
  ,npc_         = "lavrentiev"
  ,nam          = _"Лаврентьев"
  ,Exam         = [[На Лаврентьеве тёмный свитер и мятый серый пиджак. В этом облачении он похож скорее
                    на разнорабочего, чем на преподавателя.]]
  ,Listen       = choose_ {
                     ["default"] =
                        chain_ {
                          inc_("dream5_professor1._listen"),
                          [[-- Итак, -- продолжает Лаврентьев, -- сегодня будет немного новая задача.
                            Ситуация такая... Корабль дрейфует рядом с метеоритным шлейфом, перед вами
                            появляется противник. Вам необходимо активировать щиты и совершить манёвр
                            уклонения по траектории, которая как раз идет через шлейф. Попыток у вас
                            неограниченное количество, но по правде сказать...^
                            -- Извините, -- спрашивает кто-то позади меня, -- а зачем совершать манёвр
                            через шлейф?^
                            -- Зачем вообще совершать манёвр? -- поддакивают смельчаку, и в зале раздаётся
                            смешок.^
                            -- Господа! -- Лаврентьев недовольно качает головой. -- Задача симуляции
                            научить вас работать с нейроинтерфейсом, тактику вы будете изучать на других
                            занятиях. И вообще... Я попросил бы отнестись к этому посерьёзнее. Я понимаю,
                            конечно, что это не первая ваша работа с нейросимуляцией, но это впервые, когда
                            вам необходимо выполнить... приближенную к реальным условиям задачу в ограниченное
                            время.^
                            Смешки прекратились.^
                            -- Так... -- Лаврентьев морщится, пытаясь что-то вспомнить. -- Ещё один момент...]]
                        }
                    ,["dream5_professor1._listen==1"] =
                        chain_ {
                          inc_("dream5_professor1._listen"),
                          set_("dream5._done"),
                          [[-- Господа, -- говорит Лаврентьев, -- возвращаясь ещё раз к теме о... несчастных
                            случаях. Многие из вас, наверное, слышали о... произошедшем... с вашим...^
                            Лаврентьев начинает как-то странно запинаться и едва не заикается.^
                            -- С вашим коллегой, -- выговаривает, наконец, он, -- со старшего курса. Так вот,
                            хотел бы сказать, что слухи эти несколько... преувеличены. Вполне известный факт,
                            что многие, особенно новички, могут чувствовать себя несколько некомфортно после
                            нейросеанса. Бывает иногда очень... резкая реакция на свет или темноту, в общем,
                            на любые перепады освещения. Так вот, это нормально. Это известные побочные
                            эффекты и если бы... если бы вы читали ваши страховки -- то там всё это подробно
                            описывается. Тем не менее, если вы почувствуете себя подобным образом...^
                            -- Ну, точно про старшекурсника правда, -- шепчет мне на ухо Виктор.^
                            -- Итак, -- заключает Лаврентьев, -- на этом с введениями заканчиваем. Прошу вас,
                            как говорится, занять свои места.]]
                        }
                    ,["dream5_professor1._listen==2"] = 
                        [[Лаврентьев стоит в стороне и ждёт, когда мы подойдем к креслам.]]
                  }
  ,Talk         = choose_ {
                     ["default"] = [[Лучше я не буду перебивать профессора, всё равно у меня нет к нему никаких вопросов.]]
                    ,["dream5_professor1._listen==2"] = [[Не представляю, о чём его можно спросить.]]
                  }
  ,Attack       = [[Это плохая шутка.]]
  ,Approach     = choose_ {
                     ["default"] =
                        [[Если у меня появится какой-нибудь вопрос, я могу просто поднять руку. Но, честно говоря,
                          никаких вопросов у меня пока что нет.]]
                    ,["dream5_professor1._listen==2"] = [[Лаврентьев уже всё объяснил, нужно просто сесть в кресло.]]
                  }
  ,Think        = [[Лаврентьев -- не худший наш преподаватель. На экзаменах особенно не зверствует, в отличие
                    от Соколовского, и даже прощает иногда прогулы. Но на халяву с ним рассчитывать тоже не стоит.]]
}:like(pHuman)

dream5_victor1 = item {
   nam          = _"Виктор"
  ,npc_         = "victor"
  ,Exam         = [[Кажется, на Виктора эта непрошенная лекция нагоняет ещё большую скуку, чем на меня.]]
  ,Talk         = [[Не стоит привлекать к себе внимание. Лаврентьев и так сделал нам замечание.]]
  ,Listen       = redirect_("Talk")
  ,Attack       = [[Потом. После лекции.]]
  ,Think        = redirect_("Think", "victor")
  ,Approach     = choose_ {
                     ["default"] = [[Мы и так стоим рядом.]]
                    ,["dream5_professor1._listen==2"] = 
                        [[С Виктором я могу пообщаться потом, а сейчас мне нужно подключиться к нейроинтерфейсу.]]
                  }
}:like(pHuman)

dream5_surround = item {
   nam          = _"аудитория"
  ,Exam         = [[В этой аудитории проходит большинство практических занятий с нейроинтерфейсом. Здесь нет
                    парт и голографических проекторов. Вместо этого в центре комнаты стоят шесть
                    кресел с высокими спинками, вызывающих не самые приятные воспоминания о визитах к
                    стоматологу. Перед каждым креслом разместился терминал в виде кубической колонны с
                    небольшим диагностическим экраном и панелью управления.^
                    Меня всегда удивляло, почему в институте так мало подобных комнат -- лабораторий, как
                    их здесь называют, -- и почему кресел всего шесть, когда занятия обязательны для
                    всего курса. Неужели из-за ограничений бюджета? В итоге одна такая практика с нейроинтерфейсом
                    растягивается на месяц, весь курс разбивают на группы, а Лаврентьев, который обычно выступает
                    в роли инструктора, наверняка каждый раз повторяет одну и ту же вводную лекцию.]]
  ,Listen       = [[Все молчат.]]
}:like(pPhenom)

dream5_terminals = item {
   nam          = _"терминалы"
  ,Exam         = [[Я точно не знаю, какие симуляции может выполнять компьютер. Всё, что мне пока
                    доводилось испытать на себе -- это сильно упрощённый интерфейс небольшого корабля,
                    не умеющего открывать туннели, но зато способного вставать на орбиту и даже заходить на
                    посадку.]]
  ,Approach     = redirect_("Approach", "dream5_sit1")
  ,TurnOn       = [[Лучше не трогать эти терминалы.]]
  ,TurnOff      = redirect_("TurnOn")
  ,Ascend       = [[Вряд ли терминалы рассчитаны на подобное использование.]]
}:like(pDevice)

dream5_sit1 = item {
   nam          = _"кресло"
  ,Exam         = [[Кресло у ближайшего ко мне терминала похоже на больничное -- с длинной, откинутой назад
                    спинкой и большим подголовником на металлических креплениях.]]
  ,Approach     = choose_ {
                     ["default"] = [[Лучше подождать, пока Лаврентьев закончит своё выступление.]]
                    ,["dream5._done"] = walk_("dream5room")
                  }
  ,Move         = redirect_("Approach")
  ,Sit          = redirect_("Approach")
  ,Lie          = redirect_("Approach")
  ,Ascend       = redirect_("Approach")
  ,articles     = {
                     ["Sit"] = "в"
                    ,["Lie"] = "в"
                    ,["Ascend"] = "в"
                  }
}:like(pChair)


---------------------------------------------------------------------------------------------------
--dream5room
---------------------------------------------------------------------------------------------------
dream5room = scene {
   enter        = chain_ {
                    timer_(6000),
                    music_("electronica")
                  }
  ,obj          = {
                     "dream5room_start"
                    ,"dream5_victor2"
                    ,"dream5_professor2"
                    ,"dream5_sit2"
                    ,"dream5_terminals2"
                    ,"dream5_surround"
                  }
  ,Refresh      = [[Я стою рядом с учебным симулятором корабельной нейросети. Все остальные уже
                    подключились к интерфейсу, однако я всё ещё колеблюсь.]]
  ,Wait         = [[Я уже много раз это делал, так почему сейчас не могу решиться? Нужно просто сесть в это
                    кресло.]]
  ,Exit         = redirect_("Exit", "dream5")
  ,timer        = chain_ {
                    timerstop,
                    mute_(4000,0)
                  }
}

dream5room_start = rooms.event
  [[Я уже подключался к нейросети, однако всё равно дыхание у меня перехватывает от волнения.
    Я нерешительно стою рядом с огромным больничным креслом, к подголовнику которого приделан металлический
    обруч, напоминающий какое-то кошмарное пыточное устройство. Но ведь это уже не первый мой раз.
    Что со мной такое?^
    Нужно взять себя в руки. Нужно просто сесть в это кресло.]]

dream5_professor2 = from_("dream5_professor1") {
   _talk        = false
  ,npc_         = "lavrentiev"
  ,nam          = _"Лаврентьев"
  ,Talk         = choose_ {
                     ["default"] =
                        chain_ {
                          set_("s._talk"),
                          [[Я вопросительно смотрю на Лаврентьева, точно собираюсь о чём-то спросить,
                            но не решаюсь.^
                            -- Что-то не так? -- говорит Лаврентьев. -- Вы ведь подключались уже
                            раньше. Это обычная практика, а не экзамен. Смелее!]]
                        }
                    ,["s._talk"] = 
                        [[О чем мне с ним говорить? Нужно просто подключиться к нейросети. Даже странно,
                          что я так волнуюсь.]]
                  }
  ,Listen       = [[-- Ну, же смелее! -- ободряюще говорит Лаврентьев.]]
  ,Reply        = redirect_("Talk")
  ,Attack       = [[Да, это будет отличное завершение сегодняшнего дня.]]
  ,Approach     = redirect_("Talk")
}

dream5_victor2 = from_("dream5_victor1") {
   nam          = _"Виктор"
  ,npc_         = "victor"
  ,Exam         = [[Виктор сегодня совершенно спокоен. Неужто я один нахожусь на грани нервного срыва?]]
  ,Talk         = [[Виктор уже подключился. Боюсь, нашу беседу придётся отложить.]]
  ,Attack       = [[Это мне точно не поможет.]]
  ,Listen       = redirect_("Talk")
  ,Reply        = redirect_("Talk")
  ,Approach     = redirect_("Talk")
}

dream5_sit2 = item {
   nam          = _"кресло"
  ,Exam         = redirect_("Exam", "dream5_sit1")
  ,Approach     = [[Я и так стою рядом с креслом.]]
  ,Open         = [[Не представляю, что и как здесь можно открыть.]]
  ,Close        = [[Мне кажется, это кресло не складывается.]]
  ,Sit          = chain_ {
                    hideinput,
                    walkfast2_("dream5maintrans")
                  }
  ,Lie          = redirect_("Sit")
  ,Move         = [[Мне нужно просто сесть в это кресло.]]
  ,Ascend       = redirect_("Sit")
  ,articles     = {
                     ["Sit"] = "в"
                    ,["Lie"] = "в"
                    ,["Ascend"] = "в"
                  }
}:like(pChair)

dream5_terminals2 = from_("dream5_terminals") {
   nam          = name_ {
                     ["default"] = _"терминалы"
                    ,["Plug"] = _"терминал нейроинтерфейса"
                  }
  ,Approach     = [[Я и так стою у терминала.]]
  ,TurnOn       = [[Включать ничего не надо, система уже активирована. Нужно просто сесть в это кресло.]]
  ,TurnOff      = [[Непонятно, что я собираюсь тут отключить.]]
  ,Open         = redirect_("TurnOn")
  ,Activate     = redirect_("TurnOn")
  ,Plug         = redirect_("Sit", "dream5_sit2")
  ,articles     = {
                    ["Plug"] = "к"
                  }
}


---------------------------------------------------------------------------------------------------
--dream5main
---------------------------------------------------------------------------------------------------
Verb { "IncreaseLoc %2", "~увеличить", verb_with_obj_inv_("вн") }
Verb { "DecreaseLoc %2", "~уменьшить", verb_with_obj_inv_("вн") }
Verb { "ChangeLoc %2", "~изменить", verb_with_obj_inv_("вн") }
Verb { "ContactLoc0 %2", "~послать сигнал", verb_with_obj_inv_("вн") }
Verb { "ContactLoc1 %2", "~связаться", verb_with_obj_inv_("тв") }

function dream5_resetsim()
  shield._level=0;
  engine._level=0;
  trajectory._done=false;
end

dream5_vshield = item {
   nam          = _"щиты"
  ,Think        = chain_ {
                    hideinput,
                    walkfast2_("dream5shieldtrans")
                  }
  ,articles     = {
                    ["Think"] = "о"
                  }
}

dream5_vengine = item {
   nam          = _"маневровый двигатель"
  ,Think        = chain_ {
                    hideinput,
                    walkfast2_("dream5enginetrans")
                  }
  ,articles     = {
                    ["Think"] = "о"
                  }
}

dream5_vcomm = item {
   nam          = _"подпространственная связь"
  ,Think        = chain_ {
                    hideinput,
                    walkfast2_("dream5commtrans")
                  }
  ,articles     = {
                    ["Think"] = "о"
                  }
}

dream5maintrans = pause {
   enter        = sound_("percussion")
  ,pic          = "light"
  ,time         = 500
  ,next         = chain_ {
                    neuro,
                    showinput,
                    walk_("dream5main")
                  }
}

dream5maintrans2 = pause {
   enter        = sound_("error")
  ,pic          = "redlight"
  ,time         = 500
  ,next         = chain_ {
                    showinput,
                    walk_("dream5main", apply_("s._tmpdsc"))
                  }
}

dream5main = scene {
   enter        = timer_(4000)
  ,obj          = {
                     "dream5main_start"
                    ,"dream5main_itself"
                    ,"dream5_vshield"
                    ,"dream5_vengine"
                    ,"dream5_vcomm"
                  }
  ,norefresh    = true
  ,timer        = chain_ {
                    timerstop,
                    music_("machine1",1,4000,2000)
                  }
}

dream5main_start = rooms.event
  [[Я надеваю на голову обруч, и тот неожиданно сильно сжимает мне виски. Я закрываю глаза и несколько секунд
    чувствую только головную боль, как во время мучительной вирусной болезни, когда от
    постоянной температуры и мигрени путаются мысли. Постепенно боль стихает, и я словно засыпаю,
    медленно проваливаюсь в глубокую бездонную темноту. Я даже чувствую усталость -- так, как если бы
    не спал уже несколько суток кряду.^
    Вскоре боль проходит, и темноту вокруг меня озаряет яркая испепеляющая вспышка. На мгновение
    всё вокруг заливает белым свечением, а когда меня вновь облекает непроницаемая темнота, я вдруг
    понимаю, что уже не нахожусь в лабораторной. Кто-то другой остался там, в высоком кресле с
    металлическим обручем на голове, я же перенёсся в другое, невозможное в нашем мире пространство,
    где нет ни света, ни звука, ни движения -- лишь мои собственные, яркие, почти осязаемые мысли.^^]]

dream5main_itself = rooms.dsc
  [[Я медленно плыву в чёрной бессветной невесомости. Вокруг меня ничего нет, однако я каким-то образом
    понимаю, что этот замкнутый мир вовсе не пуст и, стоит мне лишь подумать о чём-то, как мысли
    мои тут же обретут форму.]]

---------------------------------------------------------------------------------------------------
--dream5shield
---------------------------------------------------------------------------------------------------
dream5shieldtrans = pause {
   enter        = sound_("percussion")
  ,pic          = "light"
  ,time         = 1000
  ,next         = chain_ {
                    showinput,
                    walk_("dream5shield")
                  }
}

dream5shield = scene {
   obj          = {
                     "dream5shield_itself"
                    ,"shield"
                    ,"dream5shield_task"
                    ,"dream5_vengine"
                    ,"dream5_vcomm"
                  }
  ,before_IncreaseLoc
                = choose_ {
                    ["shield._level+engine._level==3"] = [[Недостаточно энергии для увеличения мощности щитов.]]
                  }
  ,before_DecreaseLoc
                = choose_ {
                    ["shield._level==1 and trajectory._done"] =
                        chain_ {
                          dream5_resetsim,
                          hideinput,
                          walkfast2_("dream5maintrans2",
                            [[Внимание! Ошибка!^
                              Множественные пробои корпуса от метеоритного дождя.^
                              Симуляция перезагружена.]])
                        }
                  }
  ,nodefault    = true
}

dream5shield_itself = rooms.dsc
  [[Я оказываюсь в пульсирующем коконе из чистой энергии посреди бесконечной темноты. Я 
    заключён внутри этого электронного сердца и невольно подчиняюсь его нервному неровному ритму.
    Кажется, что, стоит мне расслабиться лишь на мгновение, как сердце остановится, энергия рассеется, и окружающая
    тьма поглотит меня без остатка. Однако я одновременно существую и вне этого энергетического кокона, наблюдаю со стороны
    летящий в безвоздушной пустоте корабль, как будто сам я как раз и являюсь той самой темнотой, что
    его окружает.^
    Лишь одной моей мысли достаточно, чтобы <i>увеличить</i> или <i>уменьшить</i> уровень щитов корабля. Я
    могу перераспределять энергию между различными отсеками, защищая двигатели, коммуникационные системы
    или экипаж, однако передо мной стоит куда более простая задача -- равномерно изменить уровень щитов
    над всем кораблём.^]]

shield = item {
   _level       = 0
  ,dsc          = choose_ {
                     ["s._level==0"] = [[Сейчас щиты отключены.]]
                    ,["s._level==1"] = [[Сейчас уровень щитов равен 33%.]]
                    ,["s._level==2"] = [[Сейчас уровень щитов равен 66%.]]
                    ,["s._level==3"] = [[Сейчас уровень щитов равен 99%.]]
                  }
}

dream5shield_task = item {
   nam          = _"уровень щитов"
  ,IncreaseLoc  = choose_ {
                     ["shield._level==0"] =
                        chain_ {
                          exec_("shield._level=1"),
                          [[Я включаю щиты на уровне 33% от максимума.]]
                        }
                    ,["shield._level==1"] =
                        chain_ {
                          exec_("shield._level=2"),
                          [[Я увеличиваю уровень щитов до 66%.]]
                        }
                    ,["shield._level==2"] =
                        chain_ {
                          exec_("shield._level=3"),
                          [[Я увеличиваю уровень щитов до 99%.]]
                        }
                    ,["shield._level==3"] = [[Щиты уже на максимальном уровне.]]
                  }
  ,DecreaseLoc  = choose_ {
                     ["shield._level==0"] = [[Щиты уже отключены.]]
                    ,["shield._level==1"] =
                        chain_ {
                          exec_("shield._level=0"),
                          [[Я отключаю щиты.]]
                        }
                    ,["shield._level==2"] =
                        chain_ {
                          exec_("shield._level=1"),
                          [[Я уменьшаю уровень щитов до 33%.]]
                        }
                    ,["shield._level==3"] =
                        chain_ {
                          exec_("shield._level=2"),
                          [[Я уменьшаю уровень щитов до 66%.]]
                        }
                  }
}

---------------------------------------------------------------------------------------------------
--dream5engine
---------------------------------------------------------------------------------------------------
dream5enginetrans = pause {
   enter        = sound_("percussion")
  ,pic          = "light"
  ,time         = 1000
  ,next         = chain_ {
                    showinput,
                    walk_("dream5engine")
                  }
}

dream5engine = scene {
   enter        = timer_(4000)
  ,obj          = {
                     "dream5engine_itself"
                    ,"dream5engine_task1"
                    ,"dream5engine_task2"
                    ,"dream5_vshield"
                    ,"dream5_vcomm"
                    ,"engine"
                    ,"trajectory"
                  }
  ,before_IncreaseLoc
                = choose_ {
                    ["shield._level+engine._level==3"] = 
                        [[Недостаточно энергии для увеличения мощности маневровых двигателей.]]
                  }
  ,timer        = chain_ {
                    timerstop,
                    playonce_("machine1")
                  }
  ,norefresh    = true
}

dream5engine_itself = rooms.dsc
  [[Всё вокруг меня по-прежнему застилает темнота, однако я уже не чувствую себя призраком,
    мечущемся в этой всепоглощающей тьме -- я обрёл тело, форму и направление. Я уже не падаю в бездну,
    я лечу вперёд сквозь бессветное пространство.^
    Я могу <i>увеличить</i> или <i>уменьшить</i> мощность двигателей, а также <i>изменить</i>
    траекторию корабля.^]]

engine = item {
   _level       = 0
  ,dsc          = choose_ {
                     ["s._level==0"] = [[Сейчас маневровые двигатели отключены.]]
                    ,["s._level==1"] = [[Сейчас мощность маневровых двигателей составляет 33% от максимума.]]
                    ,["s._level==2"] = [[Сейчас мощность маневровых двигателей составляет 66% от максимума.]]
                    ,["s._level==3"] = [[Сейчас мощность маневровых двигателей составляет 99% от максимума.]]
                  }
}

trajectory = item {
   _done        = false
  ,dsc          = choose_ {
                     ["not s._done"] = [[Требуемая траектория движения не задана.]]
                    ,["default"] = [[Я уже задал кораблю требуемую траекторию движения.]]
                  }
}

dream5engine_task1 = item {
   nam          = _"мощность двигателей"
  ,IncreaseLoc  = choose_ {
                     ["engine._level==0"] =
                        chain_ {
                          exec_("engine._level=1"),
                          [[Я активирую маневровые двигатели и устанавливаю их мощность на уровне в 33% от
                            максимума.]]
                        }
                    ,["engine._level==1"] =
                        chain_ {
                          exec_("engine._level=2"),
                          [[Я увеличиваю мощность двигателей до 66%.]]
                        }
                    ,["engine._level==2"] =
                        chain_ {
                          exec_("engine._level=3"),
                          [[Я увеличиваю мощность двигателей до 99%.]]
                        }
                    ,["engine._level==3"] = [[Двигатели уже на максимальном уровне.]]
                  }
  ,DecreaseLoc  = choose_ {
                     ["engine._level==0"] = [[Маневровые двигатели и так отключены.]]
                    ,["engine._level==1"] =
                        chain_ {
                          exec_("engine._level=0"),
                          [[Я отключаю маневровые двигатели.]]
                        }
                    ,["engine._level==2"] =
                        chain_ {
                          exec_("engine._level=1"),
                          [[Я уменьшаю мощность двигателей до 33%.]]
                        }
                    ,["engine._level==3"] =
                        chain_ {
                          exec_("engine._level=2"),
                          [[Я уменьшаю мощность двигателей до 66%.]]
                        }
                  }
}

dream5engine_task2 = item {
   nam          = _"траектория движения"
  ,ChangeLoc    = choose_ {
                     ["default"] =
                        choose_ {
                           ["engine._level<2"] = [[Недостаточно мощности для совершения заданного маневра.]]
                          ,["engine._level>=2 and shield._level>=1"] =
                              chain_ {
                                set_("trajectory._done"),
                                [[Успешно задана новая траектория движения.]]
                              }
                          ,["engine._level>=2 and shield._level==0"] =
                              chain_ {
                                dream5_resetsim,
                                hideinput,
                                walkfast2_("dream5maintrans2",
                                  [[Внимание! Ошибка!^
                                    Манёвр был предпринят с отключёнными щитами. Множественные пробои корпуса от
                                    метеоритного дождя.^
                                    Симуляция перезагружена.]])
                              }
                        }
                    ,["trajectory._done"] = [[Требуемая траектория движения уже задана.]]
                  }
}


---------------------------------------------------------------------------------------------------
--dream5comm
---------------------------------------------------------------------------------------------------
dream5commtrans = pause {
   enter        = sound_("percussion")
  ,pic          = "light"
  ,time         = 1000
  ,next         = chain_ {
                    showinput,
                    walk_("dream5comm")
                  }
}

dream5comm = scene {
   obj           = {
                     "dream5comm_itself"
                    ,"dream5comm_task"
                    ,"dream5_vshield"
                    ,"dream5_vengine"
                  }
  ,norefresh    = true
}

dream5comm_itself = rooms.dsc
  [[Я слышу слабое искажённое эхо чьих-то голосов, мелодичную морзянку кодовых сообщений, обрывочные
    звуковые пакеты. Меня окружает пустота, однако я не один.^
    Мне достаточно лишь подумать о том, чтобы <i>послать сигнал</i> через подпространственную связь, чтобы
    установить контакт с Землёй.]]

dream5comm_task = item {
   nam          = _"база"
  ,dsc          = [[^Необходимо послать сигнал по подпространственной связи на центральную базу.]]
  ,ContactLoc0  = choose_ {
                     ["not trajectory._done"] = [[По условию задания сначала нужно изменить траекторию движения.]]
                    ,["trajectory._done"] =
                        choose_ {
                           ["shield._level+engine._level==3"] =
                              [[Недостаточный уровень энергии для открытия канала подпространственной связи.]]
                          ,["default"] =
                              chain_ {
                                hideinput,
                                walkfast2_("dream5finaltrans")
                              }
                        }
                  }
  ,ContactLoc1  = redirect_("ContactLoc0")
  ,articles     = {
                     ["ContactLoc0"] = "на"
                    ,["ContactLoc1"] = "с"
                  }
}


---------------------------------------------------------------------------------------------------
--dream5final
---------------------------------------------------------------------------------------------------
dream5finaltrans = pause {
   enter        = sound_("percussion")
  ,pic          = "light"
  ,time         = 1000
  ,next         = chain_ {
                    showinput,
                    walk_("dream5final")
                  }
}

dream5final = scene {
   enter        = music_("machine2",1,4000,2000)
  ,obj          = {
                     "dream5final_start"
                  }
  ,norefresh    = true
  ,EndSimulation= chain_ {
                    function(s)
                      hero._rets=1;
                    end,
                    light_(false),
                    walk_("dream6start")
                  }
}

dream5final_start = rooms.event
  [[Всё сделано, я завершил задание. Симуляция должна завершиться в любое мгновение -- странный морок пройдет,
    бесформенная тьма вокруг меня растает, и я медленно приду в себя на пыточном кресле, вновь чувствуя, как
    металлический обруч сжимает мои виски.^
    Однако ничего не происходит.^
    Меня вдруг накрывает глубокая страшная тишина. Мысли мои уже никто не слышит, я не чувствую вокруг себя
    той пульсирующей жизни, призрачного невидимого потока электронов, который пронзал эту зияющую пустоту ещё
    мгновение назад. Всё вдруг оборвалось, прекратило своё существование, сгинуло в страшной разверстой бездне,
    в которую беспомощно проваливаюсь и я.^
    Я в панике пытаюсь вспомнить команду для экстренного завершения симуляции...^
    <i>ВЕРНИСЬ!</i>^
    Вот она! <i>ВЕРНИСЬ!</i>^
    Я пытаюсь выкрикнуть её в пустоту...]]
